#ifndef CMESA_H
#define CMESA_H

#include <QObject>
#include "ccarta.h"
#include "cjogador.h"

class CMesa : public QObject
{
    Q_OBJECT
    Q_ENUMS(ETipoJogo)
    Q_ENUMS(ETipoBaralho)

    Q_PROPERTY(CCarta* carta1 READ getCarta1 WRITE setCarta1 NOTIFY carta1Changed)
    Q_PROPERTY(CCarta* carta2 READ getCarta2 WRITE setCarta2 NOTIFY carta2Changed)
    Q_PROPERTY(CCarta* carta3 READ getCarta3 WRITE setCarta3 NOTIFY carta3Changed)
    Q_PROPERTY(CCarta* carta4 READ getCarta4 WRITE setCarta4 NOTIFY carta4Changed)

    Q_PROPERTY(CJogador* jogador1 READ getJogador1 NOTIFY jogadoresChanged)
    Q_PROPERTY(CJogador* jogador2 READ getJogador2 NOTIFY jogadoresChanged)
    Q_PROPERTY(CJogador* jogador3 READ getJogador3 NOTIFY jogadoresChanged)
    Q_PROPERTY(CJogador* jogador4 READ getJogador4 NOTIFY jogadoresChanged)

    Q_PROPERTY(CCarta* manilha READ getManilha WRITE setManilha NOTIFY manilhaChanged)
public:
    enum ETipoJogo { E_1x1, E_2x2 };
    enum ETipoBaralho { E_Baralho_Limpo, E_Baralho_Sujo };

    explicit CMesa(QObject *parent = 0);

    CCarta* getCarta1();
    CCarta* getCarta2();
    CCarta* getCarta3();
    CCarta* getCarta4();
    CCarta* getManilha();

    CJogador* getJogador1();
    CJogador* getJogador2();
    CJogador* getJogador3();
    CJogador* getJogador4();

    void setCarta1(CCarta *c);
    void setCarta2(CCarta *c);
    void setCarta3(CCarta *c);
    void setCarta4(CCarta *c);

    void setManilha(CCarta *c);

    ETipoJogo getTipoJogo();
    ETipoBaralho getTipoBaralho();
    void setTipoJogo(ETipoJogo tipoJogo);
    void setTipoBaralho(ETipoBaralho tipoBaralho);

    void NovoJogo();
    void NovaRodada();

private:
    CCarta *_carta1, *_carta2, *_carta3, *_carta4, *_manilha;
    CJogador *_jogador1, *_jogador2, *_jogador3, *_jogador4;
    ETipoJogo _tipoJogo;
    ETipoBaralho _tipoBaralho;
    QList<CCarta*> _cartas;

    void DistribuirCartasJogadores();
    void MontarBaralho();
    void PrepararBaralho();

    void DeletarJogadores();
    void CriarJogadores();

signals:
    void carta1Changed();
    void carta2Changed();
    void carta3Changed();
    void carta4Changed();
    void jogadoresChanged();
    void manilhaChanged();

    CCarta *VirarCartaQuente();

public slots:
    void LimparMesa();

};

#endif // CMESA_H
